iT邦幫忙

2024 iThome 鐵人賽

DAY 5
1
DevOps

DevOps菜鳥的30天實踐挑戰:從 CI/CD Pipeline 到雲端佈署系列 第 5

Day05 - 使用 Azure DevOps Pipelines 持續集成 (CI)

  • 分享至 

  • xImage
  •  

在現代軟體開發中,持續集成 (Continuous Integration, CI) 是一個至關重要的流程。透過自動化的構建與測試,開發團隊可以快速發現並解決問題,大幅提高開發效率和產品品質。今天我們將介紹如何使用 Azure DevOps Pipelines 設置 CI 流程。

持續集成 (CI) 是什麼?

持續集成 (CI) 是指開發者頻繁將程式碼提交到共享的版本庫,並透過自動化的測試和構建來快速檢查每次變更是否穩定。CI 的主要目的是減少整合時的衝突,並保證程式碼隨時可以被交付。
CI 的核心目標包括:

  • 自動化測試:每次程式碼變更都會觸發測試,以保證新功能不會破壞現有的功能。
  • 自動化構建:當程式碼提交後,系統會自動編譯應用程式,確保無法通過編譯的程式碼不會進入生產環境。
  • 快速反饋:當測試失敗或編譯出錯時,開發者能快速收到通知並進行修正。

持續集成 (CI) 的好處

透過 Azure Pipelines 進行持續集成,開發團隊可以受益於以下幾個方面:

  • 提升團隊協作效率:CI 自動化測試讓開發者可以專注於功能開發,而不用擔心程式碼衝突(conflict)或回滾(rollback)問題。
  • 快速識別問題:每次程式碼提交都會自動進行測試,確保每次變更的可靠性,問題能夠早發現、早解決。
  • 穩定可預測的交付:通過 CI,開發團隊能夠持續產出穩定且可交付的軟體版本,縮短開發到交付的周期。

Azure DevOps Pipelines 概述

Azure Pipelines 是 Azure DevOps 的一部分,它是一個完整的 CI/CD 解決方案。通過 Azure Pipelines,我們可以:

  1. 構建和測試應用程式,支援多種程式語言和框架(如 .NET、Java、Node.js、Python 等)。
  2. 自動化測試以確保應用程式的穩定性。
  3. 使用 YAML 文件來定義 CI/CD 流程,靈活而且版本可控。

設置 Azure DevOps Pipelines 的步驟

1. 創建 Pipeline 專案

首先,確保已在 Azure DevOps 中創建了一個專案(可以參考之前的文章 Day03 - 使用 Azure DevOps 加速交付)。進入專案後,點擊左側的 Pipelines 選項,然後點擊 Create Pipeline 來開始設置。
https://ithelp.ithome.com.tw/upload/images/20240919/20169492LwsNXehC1j.png

2. 連接版本控制庫

Azure Pipelines 支援多種版本控制系統,包括 Azure Repos、GitHub 和 Bitbucket。在本範例中,我們將使用前篇創建的 Azure Repos(Day04 - 使用 Azure DevOps Repos 進行 Git 版本控制)。選擇版本控制系統,然後選擇要建立 CI 的程式碼庫。

https://ithelp.ithome.com.tw/upload/images/20240919/20169492tIFyS85T3U.pnghttps://ithelp.ithome.com.tw/upload/images/20240919/20169492OR0IkQjX2i.png

3. 選擇構建配置

當連接到版本庫後,Azure Pipelines 會嘗試自動偵測專案的技術棧並建議合適的構建模板。選擇合適的模板(如 Node.js、Python、.NET 等)後,可以根據需要進行自定義。

https://ithelp.ithome.com.tw/upload/images/20240919/20169492W3zpfbpmpF.png

4. 編寫 YAML 文件

Azure Pipelines 支援使用 YAML 文件來靈活配置 CI 流程。以下範例展示了如何針對 Python 應用程式,自動化構建和測試過程,並在多個 Python 版本上進行驗證。

trigger:
- main

pool:
  vmImage: ubuntu-latest

strategy:
  matrix:
    Python38:
      python.version: '3.8'
    Python39:
      python.version: '3.9'
    Python310:
      python.version: '3.10'
    Python311:
      python.version: '3.11'

steps:
- task: UsePythonVersion@0
  inputs:
    versionSpec: '$(python.version)'
  displayName: 'Use Python $(python.version)'

- script: |
    python -m pip install --upgrade pip
    pip install -r requirements.txt
  displayName: 'Install dependencies'

- script: |
    pip install pytest pytest-azurepipelines
    pytest
  displayName: 'pytest'
  

1. 觸發條件 (trigger)

這段設定告訴 Azure Pipelines,當 main 分支有變更時(例如,推送新的程式碼),自動觸發這個 CI 流程。

  • main:指定當 main 分支發生變動(如 push、pull request 合併等)時觸發工作流。這確保每次有新變更提交到主要分支,CI 會自動開始執行。

2. 虛擬機環境 (pool)

Azure Pipelines 允許在多種平台上運行構建工作,這裡使用的是 Ubuntu 最新版本 作為虛擬機映像。

  • pool:代表工作流程將在哪個環境上執行。Azure 提供各種預設的映像,如 ubuntu-latest, windows-latest, 和 macos-latest,根據需求選擇不同的 OS。
  • vmImage: ubuntu-latest:這裡指定了一台最新版本的 Ubuntu 作為運行環境,用來進行構建與測試流程。

3. 構建策略 (strategy)

這部分使用了 matrix 策略,讓 Azure Pipelines 同時在多個 Python 版本上進行測試。這樣能確保應用程式在多個版本的 Python 上都能正常工作。

  • strategy: matrix:Matrix 策略允許同一工作流程在多個環境或版本中執行,這裡針對 Python 的多個版本進行測試。
  • Python38, Python39, Python310, Python311:這些代表每次 CI 執行時會針對這四個 Python 版本(3.8、3.9、3.10 和 3.11)進行測試。
  • python.version: '3.x':這是設定變數,指定每個流程要使用的 Python 版本。YAML 文件的變數可以在後續的步驟中引用。

4. 使用指定 Python 版本 (steps)

在這個步驟中,我們使用 Azure Pipelines 提供的 UsePythonVersion 任務來指定 Python 的版本。

  • steps:步驟定義了構建和測試過程中的每個動作。這裡的 UsePythonVersion 是一個專門的任務,用來在虛擬機中設定特定的 Python 版本。
  • task: UsePythonVersion@0:這是 Azure Pipelines 預設的任務,用來下載並安裝指定版本的 Python。@0 代表這個任務的版本號。
  • versionSpec: '$(python.version)':引用之前 matrix 策略中定義的 Python 版本變數。這樣可以確保每次工作流運行時,會根據不同的 Python 版本進行切換。
  • displayName: 'Use Python $(python.version)':顯示名稱,用來在 Azure Pipelines 界面上顯示當前使用的 Python 版本。

5. 安裝依賴項 (steps)

這個步驟使用 pip 來安裝應用程式的依賴項。

  • script:定義要在虛擬機上執行的命令行指令。這裡的指令包括兩部分:
    1. python -m pip install --upgrade pip:使用 Python 更新 pip(Python 的套件管理工具),以確保使用最新版本。
    2. pip install -r requirements.txt:從 requirements.txt 文件中安裝所有的應用程式依賴項。這個文件通常會列出應用程式所需的所有第三方庫和其版本。
  • displayName: 'Install dependencies':這個步驟的顯示名稱,方便在 Azure Pipelines 介面中識別。

6. 執行測試 (steps)

這個步驟使用 pytest 測試框架來運行單元測試。

  • pip install pytest pytest-azurepipelines:這行命令安裝 pytest 測試框架以及 pytest-azurepipelines 插件,後者能讓 pytest 測試結果整合到 Azure Pipelines 中。
  • pytest:運行 pytest 來執行單元測試,確保應用程式的功能符合預期。
  • displayName: 'pytest':顯示名稱,讓我們清楚地看到這一步是測試步驟。

6. 執行 Pipeline

配置完成後,點擊 Run 來觸發構建流程。Azure Pipelines 將會開始下載依賴、執行測試並構建應用程式。您可以在 Pipelines 頁面查看構建過程的詳細日誌和結果。

https://ithelp.ithome.com.tw/upload/images/20240919/201694929LprxqTfB5.png
https://ithelp.ithome.com.tw/upload/images/20240919/20169492wfjs1Fe4U6.png


小結&預告

持續集成 (CI) 是 DevOps 的基石,可以說是無處不在,它讓開發團隊可以高效、可靠地交付軟體。通過 Azure DevOps Pipelines,我們可以輕鬆設置自動化構建和測試,提升開發效率並保證應用的穩定性。隨著專案的發展,我們可以進一步整合自動化部署流程,實現持續交付 (CD)。明天,我們將進一步探討 持續交付 (CD) 的實踐與應用~

https://ithelp.ithome.com.tw/upload/images/20240919/20169492TxKDivVe01.jpg

圖片來源

參考文件

自定義 Python 管線

建置和發佈 Python 應用程式


上一篇
Day04 - 使用 Azure DevOps Repos 進行 Git 版本控制
下一篇
Day06 - 持續交付 (CD) 的核心原則
系列文
DevOps菜鳥的30天實踐挑戰:從 CI/CD Pipeline 到雲端佈署12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言